/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.web.server;

import com.web.server.common.exception.Web920Exception;
import com.web.ui.model.login.LoginFrame;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 *
 * @author Lenovo
 */
public class WEB920Server {

    /**
     * 系统上下文
     *
     * @since PASIAM V1.0
     */
    public static ClassPathXmlApplicationContext context = null;
    public static boolean th_Flag = true;
    //static GelsDao gelsDao;

    /**
     * 系统入口
     * <p>
     * 该方法是系统的入口
     *
     * @param args 需要启动的模块
     * @return void
     * @author 刘红军
     * @since PASIAM V1.0
     */
    public static void main(String[] args) throws Web920Exception {
//System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
//System.out.println(WEB920Server.class.getClassLoader().getResource(""));
//System.out.println(ClassLoader.getSystemResource(""));
//System.out.println(WEB920Server.class.getResource(""));
//System.out.println(WEB920Server.class.getResource("/"));
//System.out.println(new File("").getAbsolutePath());
//System.out.println(System.getProperty("user.dir"));
        // 临时设置需要启动的模块，根据需要启动不同的模块-------------------------------
        if (null == args || args.length == 0) {
            args = new String[]{"920web.com"};
        }

        // 判断是否提供了参数，如果有就启动模块，是否直接退出
        if (null != args && args.length > 0) {

            WEB920Server.startServer(args[0]);
        } else {
            System.out.println("--------------------");
            System.exit(0);
            // 记录日志
            //LogUtil.getDebugLogger().debug("缺少系统启动参数");
            Web920Exception ex = new Web920Exception("系统启动失败：缺少系统启动参数");
            //LogUtil.saveRunLog(ex);
            throw ex;
        }

    }

    public static void startServer(String arg) {
        //ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 定义需要加载的spring配置文件的集合，其中common.xml和platform.xml是必须加载的
        List<String> initConfigFiles = new ArrayList<String>();
        initConfigFiles.add("test.xml");
        initConfigFiles.add("spring.xml");
        initConfigFiles.add("clocktask.xml");


        // 初始化上下文
        //String[] contextFiles = new String[initConfigFiles.size()];
        //initConfigFiles.toArray(contextFiles);
        
        //初始化上下文成功后，设置成功位
        //context = new ClassPathXmlApplicationContext(contextFiles);
        th_Flag = false;
        //context.registerShutdownHook();
    }

    /**
     * 停止服务
     * <p>
     * 释放spring的上下文，停止对外界提供服务
     * 当Win服务停止时，会自动调用该方法
     * 
     * @author 刘红军
     * @since  PASIAM V1.0
     */
    public static void stopServer() {
        // 如果上下文已经被初始化，便释放其内容
        if (null != context) {
            context.destroy();
        }
    }
//    public static void test() {
//        gelsDao = (GelsDao) context.getBean("gelsDao");
//        String sql = "SELECT * FROM  test_mysql LIMIT 0 , 30";
//        List<Map> list = gelsDao.queryByJdbc(sql);
//
//        for (int i = 0; i < list.size(); i++) {
//            System.out.println((String) ((Map) list.get(i)).get("name") + ",");
//        }
//    }

    

    /**
     * 从Spring上下文中获得一个对象
     * <p>
     * 方便系统中的类从Spring上下文中获得一个对象，而不是只能通过依赖注入的方式获得
     *
     * @param beanId 对象ID
     * @return void
     * @author 刘红军
     * @since PASIAM V1.0
     */
    public static Object getBean(String beanId) {

        // 如果上下文不为空才进行获得，否则直接返回空
        if (null != context) {
            return context.getBean(beanId);
        }
        return null;
    }
}
